﻿/*
7-27 冒泡法排序 (20 分)
将N个整数按从小到大排序的冒泡排序法是这样工作的：从头到尾比较相邻两个元素，如果前面的元素大于其紧随的后面元素，则交换它们。通过一遍扫描，则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推，最后只需处理两个元素，就完成了对N个数的排序。

本题要求对任意给定的K（<N），输出扫描完第K遍后的中间结果数列。

输入格式：
输入在第1行中给出N和K（1≤K<N≤100），在第2行中给出N个待排序的整数，数字间以空格分隔。

输出格式：
在一行中输出冒泡排序法扫描完第K遍后的中间结果数列，数字间以空格分隔，但末尾不得有多余空格。

输入样例：
6 2
2 3 5 1 6 4
输出样例：
2 1 3 4 5 6
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

static void swap(int* a, int* b) {
	int temp = *a;
	*a = *b;
	*b = temp;
}

static void bubble_scan(int n, int *datas) {
	for (int i = 1; i < n; i++, datas++) {
		if (datas[0] > datas[1]) 
			swap(datas, datas + 1);
	}
}

static void bubble(int n, int k, int datas[]) {
	int i = 0;
	for (i = 0; i < k; i++)
		bubble_scan(n, datas);
	for (i = 0; i + 1 < n; i++)
		printf("%d ", datas[i]);
	printf("%d", datas[i]);
}

static void read_data(int *n, int *k, int *data) {
	scanf("%d %d", n, k);
	for (int i = 0; i < *n; i++)
		scanf("%d", data++);
}

int main() {
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/zju_C_Basic/data/7.27.txt", "r", stdin);
	int n, k = 0;
	int datas[101] = {};
	read_data(&n, &k, datas);
	bubble(n, k, datas);
	return 0;
}